/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package DeMaSoft;
import java.util.*;
/**
 *
 * @author Fernando
 */
public class Vehicle {
    private int _idVehiculo;
    private Date _fechaCompra;
    private int _color;
    private int _capacidadActual;
    private int _capacidadTotal;
    private float _velocidadMaxima;
    private boolean _disponible;
    private String _placa;
    private Punto _posicion;
    private int _indice;
    private ArrayList<Punto> _ruta;
    private float _residuo;
    
    public void actualizaOrdenes(Punto p,ArrayList<OrdenEntrega> ordenes){
        if(p == RouteCalculator.almacen.getUbicacion())return;
        for(int i =0; i< ordenes.size();i++){
            if(ordenes.get(i).getPuntoEntrega()==p){
                if(ordenes.get(i).getNumPaquetes() > this.getCapacidadActual()){
                    ordenes.get(i).setNumPaquetes(ordenes.get(i).getNumPaquetes()-this.getCapacidadActual());
                    this.setCapacidadActual(0);
                }
                else{
                    this.setCapacidadActual(this.getCapacidadActual()-ordenes.get(i).getNumPaquetes());
                    ordenes.get(i).setNumPaquetes(0);
                    ordenes.remove(i);
                }
            }
        }
    }

    public void avanzar(int tiempo, ArrayList<OrdenEntrega> ordenes){
        float dist = _velocidadMaxima * tiempo/60;
        int numNodos = Math.round(dist);
        float residuo = dist - numNodos;
        _residuo += residuo;
        int nodoExtra= Math.round(_residuo);
        _residuo-=nodoExtra;
        numNodos+=nodoExtra;
        int posActual = _indice;
        
        for(int i = posActual+1;i<posActual+numNodos && i<_ruta.size();i++){
            _posicion = _ruta.get(i);
            actualizaOrdenes(_posicion,ordenes);
        }
        
    }
    
    public Vehicle(int _capacidadTotal, float _velocidadMaxima) {
        this._capacidadTotal = _capacidadTotal;
        this._capacidadActual= _capacidadTotal;      
        this._velocidadMaxima = _velocidadMaxima;
        this._disponible = true;
        this._residuo=0;
    }

    
    
    public int getIdVehiculo() {
        return _idVehiculo;
    }


    public void setIdVehiculo(int idVehiculo) {
        this._idVehiculo = idVehiculo;
    }

    public Date getFechaCompra() {
        return _fechaCompra;
    }

    public void setFechaCompra(Date fechaCompra) {
        this._fechaCompra = fechaCompra;
    }

    public int getColor() {
        return _color;
    }

    public void setColor(int color) {
        this._color = color;
    }

    public int getCapacidadActual() {
        return _capacidadActual;
    }

    public void setCapacidadActual(int capacidadInicial) {
        this._capacidadActual = capacidadInicial;
    }

    public int getCapacidadTotal() {
        return _capacidadTotal;
    }

    public void setCapacidadTotal(int capacidadTotal) {
        this._capacidadTotal = capacidadTotal;
    }

    public float getVelocidadMaxima() {
        return _velocidadMaxima;
    }

    public void setVelocidadMaxima(float velocidadMaxima) {
        this._velocidadMaxima = velocidadMaxima;
    }

    public boolean isDisponible() {
        return _disponible;
    }

    public void setDisponible(boolean disponible) {
        this._disponible = disponible;
    }

    public String getPlaca() {
        return _placa;
    }

    public void setPlaca(String placa) {
        this._placa = placa;
    }

    public Punto getPosicion() {
        return _posicion;
    }

    public void setPosicion(Punto posicion) {
        this._posicion = posicion;
    }

    public ArrayList<Punto> getRuta() {
        return _ruta;
    }

    public void setRuta(ArrayList<Punto> ruta) {
        this._ruta = ruta;
        this._indice =0;
    }
    
    
}
